Computers are used in many applications. In order to facilitate user interaction, the video display of a computer typically includes a cursor, which informs the user with which part of the screen the user is interacting. For example, if the user is working in a text editor, the cursor may indicate where the next characters that are typed will appear. Cursors can take various shapes, or representations, and the shape can depend on the next type of action that will be performed in response to the user. One representation of the cursor may indicate that the user will select text, another may indicate that graphics will be selected, while yet another may indicate that text is to be inserted.
Because cursors can move freely about the screen and often should not affect the material over which they are travelling, they are typically treated as overlay video graphics elements. Video graphics elements include elements that may be used in a video application, such as one that interacts with a television picture. Video graphics elements also include elements used with the displaying and processing of graphics which may be related to a computer display. Video elements as described herein are meant to include those used in graphics applications, and vice-versa. Overlay video graphics elements take precedence over other video elements when the image to be displayed is prepared. For example, if an overlay video graphics element, such as a cursor, is positioned over a portion of a text character, the cursor will effectively "cover up" the portion of the text character that occupies the same space as the cursor.
Typically, information to be displayed as part of a video graphics system is stored in a video memory that is read by a cathode ray tube (CRT) controller. The CRT controller controls generation of the image based on the contents of the video memory. The video memory is structured such that a physical location of the display corresponds to a specific portion of the video memory. In a software cursor implementation, the cursor must be "redrawn" in video memory each time it moves to a new location. When the cursor is redrawn, the information that the cursor was covering before the move must be refreshed. This repeated redrawing can use a great deal of processing power, and therefore adversely affect performance.
Hardware cursor implementations have been known to reduce the processing power necessary to display and update cursors. In a hardware cursor implementation, the information describing a single cursor representation is stored in a predetermined location of video memory. The information that describes the screen image without the cursor is stored elsewhere in the video memory. The information from the cursor portion of the video memory is then combined with that storing the screen image to produce the final image. In such a system, when the cursor moves, the cursor placement does not affect the non-cursor information in memory. The position of the cursor in relation to the screen image is stored in a register. As the CRT controller scans the memory it compares the value in the register (the cursor position) with its current location in video memory. When the CRT controller reaches the location of the cursor, it reads the information in the cursor portion of the video memory rather than the information that describes the screen image at that point.
Although a hardware cursor setup reduces some of the processing power required to support a cursor, some sequences of commands require numerous changes of the cursor image as well as position. In order to modify the cursor image, data describing the cursor in a video format that is compatible with the CRT controller must be written in the portion of video memory allocated to the cursor. Numerous changes of the cursor image, or visual representation, can require a great deal of processing power and bus bandwidth as video format data must be generated and written to the video memory with each change.
Consequently, a need exists for a hardware cursor system that requires less processing power and bus bandwidth in order to accommodate frequent cursor changes.